package com.lv.phuotbacnam.ui.navigation;

import android.os.Bundle;

import com.lv.phuotbacnam.ui.Section;
import com.lv.phuotbacnam.ui.activity.BaseActivity;
import com.lv.phuotbacnam.ui.fragment.BaseFragment;

/**
 * Navigation controller.
 */
public interface NavigationController {

	/**
	 * Enter the full screen mode
	 */
	void enterFullScreenMode();

	/**
	 * Exit the full screen mode
	 */
	void exitFullScreenMode();

	/**
	 * Get the app navigation bar
	 * 
	 * @return Navigation bar
	 */
	NavigationBar getNavigationBar();

	/**
	 * Get the app navigation menu
	 * 
	 * @return Navigation menu
	 */
	NavigationMenu getNavigationMenu();

	/**
	 * Navigate to a screen
	 * 
	 * @param fragmentClass
	 *            Screen fragment class
	 * @param section
	 *            Section used
	 * @param arguments
	 *            Arguments to pass to the screen
	 * @param addToBackStack
	 *            Whether to add this screen to a back stack
	 * @param <F>
	 *            Class that extends the base fragment
	 */
	<F extends BaseFragment> void navigateTo(Class<F> fragmentClass,
			Section section, Bundle arguments, boolean addToBackStack);

	/**
	 * Navigate to an activity
	 * 
	 * @param activityClass
	 *            Activity to navigate to
	 * @param isFinish
	 *            To finish the activity if true
	 * @param section
	 *            Section used
	 * @param arguments
	 *            Arguments to pass to the activity
	 * @param <A>
	 *            Class that extends the base activity
	 */
	<A extends BaseActivity> void navigateTo(Class<A> activityClass,
			boolean isFinish, Section section, Bundle arguments);

	/**
	 * Exit navigation
	 */
	void exit();

	/**
	 * Show progress
	 */
	void showProgress();

	/**
	 * Hide progress
	 */
	void hideProgress();
}
